package cn.cnlee.app.repository;

import com.transitionseverywhere.utils.ReflectionUtils;

import java.lang.reflect.Array;

import cn.cnlee.app.pojo.ModuleDTO;
import cn.cnlee.app.pojo.ModuleVo;
import cn.cnlee.app.remote.response.ResponseTransformer;
import cn.cnlee.app.remote.rx.RxSubscriber;
import cn.cnlee.app.util.ReflectUtil;
import cn.cnlee.app.util.StringUtil;
import cn.cnlee.arch.rx.RxSchedulers;
import cn.cnlee.arch.util.Logger;
import cn.cnlee.arch.view.stateview.StateConstants;

public class ModuleRepository extends BaseRepository {
    protected final static String TAG = ModuleRepository.class.getSimpleName();
    public String EVENT_KEY_MODULE_DATA = null;//TODO 如何不涉及重复使用可以采用static变量

    public ModuleRepository() {
        EVENT_KEY_MODULE_DATA = StringUtil.sBlank(EVENT_KEY_MODULE_DATA, StringUtil.createEventKey());
    }

    public void getModuleData(ModuleVo moduleVo) {
        addDisposable(apiService.getModuleData(moduleVo)
                .compose(ResponseTransformer.handleFlowableResult())
                .compose(RxSchedulers.io_main())
                .subscribeWith(new RxSubscriber<ModuleDTO>() {

                    @Override
                    protected void showLoading() {
                        postState(StateConstants.LOADING_STATE);
                    }

                    @Override
                    protected void onNoNetWork() {
                        super.onNoNetWork();
                        postState(StateConstants.NET_WORK_STATE);
                    }

                    @Override
                    public void onSuccess(ModuleDTO moduleDTO) {
                        if (ReflectUtil.isObjectEmpty(moduleDTO)) {
                            postState(StateConstants.NOT_DATA_STATE);
                        }else {
                            postData(EVENT_KEY_MODULE_DATA, moduleDTO);
                            postState(StateConstants.SUCCESS_STATE);
                        }
                    }

                    @Override
                    public void onFailure(String msg, int code) {
                        postState(StateConstants.ERROR_STATE);
                    }
                }));
    }
}
